接下來的文章中,筆者打算來分享這個專案的建立過程中所需的知識點,以及筆者在這個專案中做過的事。今天我們來認識一下跟 ChameleonUltra 溝通的 Protocol 吧!
ChameleonUltra 硬體支援一種名為 Serial 的 Protocol,可以用來傳送資料給硬體,或是從硬體接收資料。然後在硬體上會透過 UART to USB 的晶片把 Serial 轉換成 USB,讓我們可以直接透過 USB 跟電腦或是手機溝通,並且也會透過 UART to 藍牙 BLE 的晶片把 Serial 轉換成 BLE,讓我們可以直接透過 BLE 協定進行傳輸。
通常 Serial 的最小傳輸單位是 Byte,但 Serial 有可能會把一筆資料分成多次傳送,所以需要由硬體及應用程式共同約定一個傳輸規則,明確的定義資料開始以及結尾。但由於硬體的效能有限,為了減少資料量並加快傳輸速度,ChameleonUltra 是以自定義的資料格式 (binary) 進行傳輸。
ChameleonUltra 所定義的資料格式如下:
1 Byte
,每一筆資料會以 SOF Byte 0x11
作為開始1 Byte
,SOF 之後會緊鄰著 SOF 的 LRC Byte (Longitudinal Redundancy Check) 0xEF
2 Bytes
,格式為 Unsigned Big Endian,代表想要執行的指令。2 Bytes
,格式為 Unsigned Big Endian,代表執行結果,如果是應用程式傳送給硬體的請求則固定為 0x0000
。2 Bytes
,格式為 Unsigned Big Endian,代表 Data 的長度,最大值為 512。1 Byte
,由 CMD
、STATUS
、LEN
三個欄位計算出來的 LRC Byte。LEN Bytes
,根據命令來解析所需傳送或接收的資料,最大長度為 512 Bytes。1 Byte
,由 DATA
計算出來的 LRC Byte。資料的總長度為 LEN + 10
Bytes。
在使用與傳送 Serial 的資料時,需要很注意 Endian 的問題,如果想要深入了解兩者的差距,可以直接透過搜尋引擎查詢更多資料。
由於電腦通常都會以 Big Endian 儲存資料,但是這類嵌入式系統通常都會使用 Little Endian,所以都需要特別注意是使用哪一種。在開發 ChameleonUltra 的過程中,其實有發現大量的 Big Endian 與 Little Endian 混用的問題,但因為硬體的現況已經是這樣,所以就只能照目前的現況來傳送及接收。